<?
class jQuickForm_Container extends HTML_QuickForm2_Container  {
   /**
    * Returns a recursive iterator for the container elements
    *
    * @return    jQuickForm_ContainerIterator
    */
    public function getIterator()
    {
        return new jQuickForm_ContainerIterator($this);
    }

   /**
    * Returns a recursive iterator iterator for the container elements
    *
    * @param    int     mode passed to RecursiveIteratorIterator
    * @return   RecursiveIteratorIterator
    */
    public function getRecursiveIterator($mode = RecursiveIteratorIterator::SELF_FIRST)
    {
        return new RecursiveIteratorIterator(
                        new jQuickForm_ContainerIterator($this), $mode
                   );
    }

    /**
     * Создание текстового поля
     *
     * @param string $name
     * @param array $attributes
     * @return HTML_QuickForm2_Element_InputText
     */
    function addInputText($name, $attributes=null){
        return $this->addElement('text',$name, $attributes);
    }
    /**
     * Создание текстового поля
     *
     * @param string $name
     * @param array $attributes
     * @return HTML_QuickForm2_Element_InputButton
     */
    function addInputButton($name=null, $attributes=null){
        return $this->addElement('inputbutton',$name, $attributes);
    }

    /**
     * Создание группы полей
     *
     * @param string $name
     * @param array $attributes
     * @param array $data
     * @return HTML_QuickForm2_Container_Group
     */
    function addGroup($name=null, $attributes=null,$data=array()){
        return $this->addElement('group',$name, $attributes, $data);
    }


    /**
     * Создание группы страниц
     *
     * @param string $name
     * @param array $attributes
     * @param array $data
     * @return HTML_QuickForm2_Container_Group
     */
    function addGroupPages($name, $attributes=null,$data=array()){
        $gr = $this->addGroup($name,$attributes,$data)->addClass('jqf_pages');
        debug($gr);
        return $gr;
    }


    /**
     * Создание группы кнопок
     *
     * @param string $name
     * @param string $label
     * @return HTML_QuickForm2_Container_Group
     */
    function addGroupButtons(){
        $gr = $this->addElement('jqf_buttons');
        $gr->addClass('jqf_page_buttons');
        return $gr;
    }


    /**
     * Создание группы страниц
     *
     * @param string $name
     * @param string $label
     * @return HTML_QuickForm2_Container_Group
     */
    function addPage($name,$label){
        return $this->addElement('jqf_page',$name)->addClass('jqf_page')->setLabel($label);
    }




    /**
     * Создание группы страниц
     *
     * @param string $name
     * @param string $label
     * @return HTML_QuickForm2_InputText
     */
    function addPageButtonPrev($label='← предыдущая'){
        return $this->addInputButton()->setValue($label);
    }


    /**
     * Создание группы страниц
     *
     * @param string $name
     * @param string $label
     * @return HTML_QuickForm2_InputText
     */
    function addPageButtonNext($label='следующая →'){
        return $this->addInputButton()->setValue($label);
    }


    /**
     * Проксирование метода добавления CSS класса для автокомплита кода, чтобы возвращаемое значение было типа jQuickForm_Container
     * @return jQuickForm_Container
     */
    public function addClass($class){
        return parent::addClass($class);
    }


    /**
     * Создание поля выбора даты
     *
     * @param string $name
     * @param array $attributes
     * @return HTML_QuickForm2_Element_InputText
     */
    function addDatePicker($name, $default=null){
        jQuickform::js()->needJqueryUi();;
        jQuickform::js()->addJsOnload('jQuery("#'.$name.'").datepicker(
        {
            changeMonth: true,
            changeYear: true,
            dateFormat: \'yy-mm-dd\',
            monthNames: [\'Январь\', \'Февраль\', \'Март\', \'Апрель\', \'Май\', \'Июнь\', \'Июль\', \'Август\', \'Сентябрь\', \'Октябрь\', \'Ноябрь\', \'Декабрь\'],
            monthNamesShort: [\'Янв\', \'Фев\', \'Мар\', \'Апр\', \'Май\', \'Июн\', \'Июл\', \'Авг\', \'Сен\', \'Окт\', \'Ноя\', \'Дек\'],
            numberOfMonths: [1, 3]
        }
        );');
        return $this->addInputText($name);
    }

    /**
     * Обертка: требуется для того, чтобы перезаписывать по умолчанию аттрибут id элемента значением name, если id не задан явно
     */
    public function addElement($elementOrType, $name = null, $attributes = null, array $data = array()){
        if($name && !isset($attributes['id'])){
            $attributes['id'] = $name;
        }
        return parent::addElement($elementOrType,$name,$attributes,$data);
    }

}


?>